package com.example.service.impl;

import com.example.mapper.componentBookMapp;
import com.example.pojo.baseComponentPojo;
import com.example.pojo.componentBookPojo;
import com.example.service.componentBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.UUID;

/**
 * ClassName:componentBookImpl
 * Description:
 *
 * @Author 赵永峰
 * @Create 2024/7/12 17:21
 * @Version 1.0
 */
@Service
public class componentBookImpl implements componentBookService {
    @Autowired
    private componentBookMapp componentBookMapp;
    @Value("${file.upload-dir}")
    private String saveDir;
    //插入一行新的数据
    public void insertOne(baseComponentPojo baseComponentPojo){
        //新建一个零部件作业指导书的数据
        componentBookPojo componentBookPojo=new componentBookPojo();
        componentBookPojo.setBaseId(baseComponentPojo.getId());
        componentBookPojo.setPartName(baseComponentPojo.getPartName());
        componentBookPojo.setPartNumber(baseComponentPojo.getPartNumber());
        componentBookPojo.setSupplier(baseComponentPojo.getSupplier());
        //组合数据
        componentBookPojo.setThreeNoBook("请输入确认项目|%||&|请输入失效说明|%||&|");
        componentBookPojo.setEstablishTime(LocalDateTime.now());
        componentBookPojo.setUpdateTime(LocalDateTime.now());
        //写入数据
        componentBookMapp.insertOne(componentBookPojo);
    }
    //对零部件作业指导书管理中的基础数据进行修订,依据是baseId
    public void editByBaseId(baseComponentPojo baseComponent){
        componentBookMapp.editByBaseId(baseComponent);
    }
    //根据baseId，查询某一个字段的内容
    public componentBookPojo inquiryByFieldAndBaseId(Map<String, Object> parameters){
        Integer baseId=(Integer) parameters.get("baseId");
        String field=(String) parameters.get("field");
        componentBookPojo fieldVal=componentBookMapp.inquiryByFieldAndBaseId(baseId);
        return fieldVal;
    }
    //修改数据，发id，修改的字段名，修改的字段值,根据ID，修改某一个字段的值,修改的是文本。
    public String editComponentBookByIDByField(Map<String, Object> parameters){
       Integer id=(Integer) parameters.get("id");
       String fieldName=(String) parameters.get("fieldName");
       String fieldVal=(String) parameters.get("fieldVal");
       componentBookMapp.editComponentBookByIDByField(id,fieldName,fieldVal);
       return fieldVal;
    }
    //上传图片的函数,根据字段名、字段变量修改数据库的信息
    public String componentPicture(MultipartFile file, Integer id, String fieldName, String fieldVal){
        try {
            // 记录文件名，并返回
            String fileNameAll = null;
            if (!file.isEmpty()) {
                // 生成文件的唯一名称以避免冲突
                String fileName = UUID.randomUUID() + "&&" + file.getOriginalFilename();
                String filePath = saveDir + fileName;
                File dest = new File(filePath);
                // 将文件保存到服务器上的指定位置
                file.transferTo(dest);
                // 将以前的文件名称与新的文件名称组合
                fileNameAll = fieldVal + fileName + "|*|";
                // 将数据写入到数据库中
                LocalDateTime dateTime = LocalDateTime.now();
                //根据传来的字段名，修改字段
                componentBookMapp.editFieldOneById(id, fieldName, fileNameAll, dateTime);
            }
            // 如果文件不为空且未发生异常，返回文件名列表
            return fileNameAll;
        }
        catch (IOException e) {
            // 捕获异常并返回错误消息
            throw new RuntimeException("文件保存失败：" + e.getMessage());
        }
    }
    //删除图片的函数
    public String componentPictureRemove(Map<String, Object> parameters){
        Integer id=(Integer) parameters.get("id");
        String fieldName=(String) parameters.get("fieldName");
        String filedVal=(String) parameters.get("filedVal");
        String pictureName=(String) parameters.get("pictureName");
        //删除文件
        String filePath =saveDir+pictureName; // 替换为你的文件路径
        // 使用 Paths 类的静态方法 get 来根据给定的文件路径字符串 filePath 创建一个 Path 对象
        Path path = Paths.get(filePath);
        try {
            // 使用 Files 类的 delete 方法删除指定的文件
            Files.delete(path);
            //修改数据库
            // 将数据写入到数据库中
            LocalDateTime dateTime = LocalDateTime.now();
            componentBookMapp.editFieldOneById (id, fieldName, filedVal, dateTime);
            return filedVal;
        } catch (IOException e) {
            System.err.println("删除文件时出错: " + e.getMessage());
            return "删除文件时出错";
        }
    }
}
